package com.yunti.springboot.email;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.internet.MimeMessage.RecipientType;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;

/**
 * @author yangtt
 * @date 2023/7/5
 */

@Service
@Slf4j
public class SendEmailService {
    public  void sendData(String sends, File file,String title){
        List<String>list = Arrays.asList(sends.split(","));
        if(list.size() == 0){return;}
        // 创建Properties 类用于记录邮箱的一些属性
        Properties props = new Properties();
        // 表示SMTP发送邮件，必须进行身份验证
        props.put("mail.smtp.auth", "true");
        //此处填写SMTP服务器
        props.put("mail.smtp.host", "smtp.qq.com");
        //端口号，QQ邮箱端口587
        props.put("mail.smtp.port", "587");
        // 此处填写，写信人的账号
        props.put("mail.user", "2817673902@qq.com");
        // 此处填写16位STMP口令
        props.put("mail.password", "hcwpdnrjwgzadhaa");
        // 构建授权信息，用于进行SMTP进行身份验证
        Authenticator authenticator = new Authenticator() {

            protected PasswordAuthentication getPasswordAuthentication() {
                // 用户名、密码
                String userName = props.getProperty("mail.user");
                String password = props.getProperty("mail.password");
                return new PasswordAuthentication(userName, password);
            }
        };
        // 使用环境属性和授权信息，创建邮件会话
        Session mailSession = Session.getInstance(props, authenticator);
        // 创建邮件消息
        MimeMessage message = new MimeMessage(mailSession);
        //【因为要发送正文和邮件所以
        // 1，设置邮件内容，混合模式
        MimeMultipart msgMultipart = new MimeMultipart("mixed");


        try {
            message.setContent(msgMultipart);
            MimeBodyPart filePart = new MimeBodyPart();
            FileDataSource dataSource = new FileDataSource(file);
            DataHandler dataHandler = new DataHandler(dataSource);
            // 文件处理
            filePart.setDataHandler(dataHandler);
            // 附件名称
            filePart.setFileName(file.getName());
            // 放入正文（有先后顺序，所以在正文后面）
            msgMultipart.addBodyPart(filePart);
            message.setFrom( new InternetAddress(props.getProperty("mail.user")));

            // 设置收件人的邮箱
            for (String send : list) {
                InternetAddress to = new InternetAddress(send);
                message.setRecipient(RecipientType.TO, to);
                // 设置邮件标题
                message.setSubject(title);
                // 最后当然就是发送邮件啦
                Transport.send(message);
                log.info("发送邮箱成功==>{}",send);
            }

        } catch (Exception e) {
            log.error(e.getMessage());
            e.printStackTrace();
        }

    }


}
